﻿#region License
/* Copyright (C) 2009 Tim Coulter
 * 
 * This file is part of ExtremeML.
 * 
 * ExtremeML is free software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation either version
 * 2 of the License, or (at your option) any later version.
 * 
 * ExtremeML is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty
 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
 * the GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
*/
#endregion

using ExtremeML.Packaging;
using NUnit.Framework;

namespace ExtremeML.Tests
{
	[TestFixture]
	public class ManipulateTables
	{
		[Test]
		public void ExtendEmptyNoTotalsTable()
		{
			using (var package = SpreadsheetDocumentWrapper.Open(Utility.CreateFileFromResource(Utility.TableSamplesTemplateResource)))
			{
				var table = package.WorkbookPart.GetTablePart("EmptyNoTotals").Table;

				Assert.AreEqual(1, table.DataRowSpan, "Table data rows");
				Assert.AreEqual(2, table.FirstRowIndex, "Table first row index");
				Assert.AreEqual(3, table.LastDataRowIndex, "Table last data row index");
				Assert.AreEqual(3, table.LastRowIndex, "Table last row index");
				table.Extend(5);
				Assert.AreEqual(5, table.DataRowSpan, "Table data rows");
				Assert.AreEqual(2, table.FirstRowIndex, "Table first row index");
				Assert.AreEqual(7, table.LastDataRowIndex, "Table last data row index");
				Assert.AreEqual(7, table.LastRowIndex, "Table last row index");
			}
		}

		[Test]
		public void ExtendEmptyWithTotalsTable()
		{
			using (var package = SpreadsheetDocumentWrapper.Open(Utility.CreateFileFromResource(Utility.TableSamplesTemplateResource)))
			{
				var table = package.WorkbookPart.GetTablePart("EmptyWithTotals").Table;

				Assert.AreEqual(1, table.DataRowSpan, "Table data rows");
				Assert.AreEqual(2, table.FirstRowIndex, "Table first row index");
				Assert.AreEqual(3, table.LastDataRowIndex, "Table last data row index");
				Assert.AreEqual(4, table.LastRowIndex, "Table last row index");
				table.Extend(5);
				Assert.AreEqual(5, table.DataRowSpan, "Table data rows");
				Assert.AreEqual(2, table.FirstRowIndex, "Table first row index");
				Assert.AreEqual(7, table.LastDataRowIndex, "Table last data row index");
				Assert.AreEqual(8, table.LastRowIndex, "Table last row index");
			}
		}

		[Test]
		public void ExtendPopulatedNoTotalsTable()
		{
			using (var package = SpreadsheetDocumentWrapper.Open(Utility.CreateFileFromResource(Utility.TableSamplesTemplateResource)))
			{
				var table = package.WorkbookPart.GetTablePart("PopulatedNoTotals").Table;

				Assert.AreEqual(4, table.DataRowSpan, "Table data rows");
				Assert.AreEqual(2, table.FirstRowIndex, "Table first row index");
				Assert.AreEqual(6, table.LastDataRowIndex, "Table last data row index");
				Assert.AreEqual(6, table.LastRowIndex, "Table last row index");
				table.Extend(5);
				Assert.AreEqual(9, table.DataRowSpan, "Table data rows");
				Assert.AreEqual(2, table.FirstRowIndex, "Table first row index");
				Assert.AreEqual(11, table.LastDataRowIndex, "Table last data row index");
				Assert.AreEqual(11, table.LastRowIndex, "Table last row index");
			}
		}

		[Test]
		public void ExtendPopulatedWithTotalsTable()
		{
			using (var package = SpreadsheetDocumentWrapper.Open(Utility.CreateFileFromResource(Utility.TableSamplesTemplateResource)))
			{
				var table = package.WorkbookPart.GetTablePart("PopulatedWithTotals").Table;

				Assert.AreEqual(4, table.DataRowSpan, "Table data rows");
				Assert.AreEqual(2, table.FirstRowIndex, "Table first row index");
				Assert.AreEqual(6, table.LastDataRowIndex, "Table last data row index");
				Assert.AreEqual(7, table.LastRowIndex, "Table last row index");
				table.Extend(5);
				Assert.AreEqual(9, table.DataRowSpan, "Table data rows");
				Assert.AreEqual(2, table.FirstRowIndex, "Table first row index");
				Assert.AreEqual(11, table.LastDataRowIndex, "Table last data row index");
				Assert.AreEqual(12, table.LastRowIndex, "Table last row index");
			}
		}

		[Test]
		public void VisualTestExerciser()
		{
			const string path = @"..\..\Target.xlsx";
			
			Utility.CreateFileFromResource(Utility.TableSamplesTemplateResource, path);

			using (var package = SpreadsheetDocumentWrapper.Open(path))
			{
				var table = package.WorkbookPart.GetTablePart("PopulatedNoTotals").Table;

				Assert.AreEqual(4, table.DataRowSpan, "Table data rows");
				Assert.AreEqual(2, table.FirstRowIndex, "Table first row index");
				Assert.AreEqual(6, table.LastDataRowIndex, "Table last data row index");
				Assert.AreEqual(6, table.LastRowIndex, "Table last row index");
				table.Extend(5);
				Assert.AreEqual(9, table.DataRowSpan, "Table data rows");
				Assert.AreEqual(2, table.FirstRowIndex, "Table first row index");
				Assert.AreEqual(11, table.LastDataRowIndex, "Table last data row index");
				Assert.AreEqual(11, table.LastRowIndex, "Table last row index");
			}
		}
	}
}
